package com.kfm.spring.demo;

import java.math.BigDecimal;
import java.math.BigInteger;

public class Demo {


    public static void main(String[] args) {
        // double 计算时会丢失精度，所以用 整数表示金额 以分为单位  1元 = 100分  金额 * 100 eg： 1.01元 = 101分
        BigDecimal bigDecimal = new BigDecimal("3.0");
        BigDecimal bigDecimal1 = new BigDecimal("2.9");
        System.out.println(bigDecimal.subtract(bigDecimal1));
        System.out.println(3.0 - 2.9);

        System.out.println(Long.MAX_VALUE);
    }

    public static void test(){

        // 计算阶乘很容易超出long的范围，所以用 BigInteger。 理论上可以计算 1000! 的值，可以表示任何数只要内存足够 2^Integer.MAX_VALUE - 1
//        BigInteger sum = new BigInteger("0");
        BigInteger sum = BigInteger.ZERO;
        for (int i = 1; i <= 100; i++) {
            sum = sum.add(factorial(i));
        }
        System.out.println(sum);
    }

    public static BigInteger factorial(int n) {

        if (n == 1) {
            return BigInteger.ONE;
        }

        return BigInteger.valueOf(n).multiply(factorial(n - 1));

    }
}
